/**
 * API测试工具
 * 用于测试课程相关API的连通性和数据格式
 */

import { StudyService } from '@/api/services';
import { showToast } from 'vant';

export class ApiTestUtil {
  /**
   * 测试课程分类API
   */
  static async testCategories() {
    try {
      console.log('🧪 测试课程分类API...');
      const result = await StudyService.getCategories();
      
      console.log('分类API响应:', result);
      
      if (result && result.data && Array.isArray(result.data)) {
        console.log('✅ 分类API测试成功，数据格式正确');
        console.log('分类数量:', result.data.length);
        return true;
      } else {
        console.log('⚠️ 分类API返回数据格式异常');
        return false;
      }
    } catch (error) {
      console.error('❌ 分类API测试失败:', error);
      return false;
    }
  }

  /**
   * 测试推荐课程API
   */
  static async testRecommendedCourses() {
    try {
      console.log('🧪 测试推荐课程API...');
      const result = await StudyService.getRecommendedCourses({ page: 1, limit: 5 });
      
      console.log('推荐课程API响应:', result);
      
      if (result && result.data && result.data.courses && Array.isArray(result.data.courses)) {
        console.log('✅ 推荐课程API测试成功，数据格式正确');
        console.log('课程数量:', result.data.courses.length);
        return true;
      } else {
        console.log('⚠️ 推荐课程API返回数据格式异常');
        return false;
      }
    } catch (error) {
      console.error('❌ 推荐课程API测试失败:', error);
      return false;
    }
  }

  /**
   * 测试课程详情API
   */
  static async testCourseDetail(courseId: number = 1) {
    try {
      console.log('🧪 测试课程详情API...');
      const result = await StudyService.getCourseDetail(courseId);
      
      console.log('课程详情API响应:', result);
      
      if (result && result.data) {
        console.log('✅ 课程详情API测试成功，数据格式正确');
        console.log('课程标题:', result.data.title);
        return true;
      } else {
        console.log('⚠️ 课程详情API返回数据格式异常');
        return false;
      }
    } catch (error) {
      console.error('❌ 课程详情API测试失败:', error);
      return false;
    }
  }

  /**
   * 测试课程课时API
   */
  static async testCourseLessons(courseId: number = 1) {
    try {
      console.log('🧪 测试课程课时API...');
      const result = await StudyService.getCourseLessons(courseId);
      
      console.log('课程课时API响应:', result);
      
      if (result && result.data && Array.isArray(result.data)) {
        console.log('✅ 课程课时API测试成功，数据格式正确');
        console.log('课时数量:', result.data.length);
        return true;
      } else {
        console.log('⚠️ 课程课时API返回数据格式异常');
        return false;
      }
    } catch (error) {
      console.error('❌ 课程课时API测试失败:', error);
      return false;
    }
  }

  /**
   * 运行所有API测试
   */
  static async runAllTests() {
    console.log('🚀 开始运行课程API测试套件...');
    
    const results = {
      categories: await this.testCategories(),
      recommendedCourses: await this.testRecommendedCourses(),
      courseDetail: await this.testCourseDetail(),
      courseLessons: await this.testCourseLessons()
    };
    
    const successCount = Object.values(results).filter(Boolean).length;
    const totalCount = Object.keys(results).length;
    
    console.log('📊 测试结果汇总:');
    console.log(`✅ 成功: ${successCount}/${totalCount}`);
    console.log('详细结果:', results);
    
    if (successCount === totalCount) {
      showToast('所有API测试通过');
      console.log('🎉 所有API测试通过！');
    } else {
      showToast(`API测试完成: ${successCount}/${totalCount} 通过`);
      console.log('⚠️ 部分API测试失败，请检查后端服务');
    }
    
    return results;
  }

  /**
   * 测试API连通性
   */
  static async testConnectivity() {
    try {
      console.log('🔗 测试API连通性...');
      
      // 使用最简单的API测试连通性
      const result = await StudyService.getCategories();
      
      if (result) {
        console.log('✅ API连通性正常');
        showToast('API连接正常');
        return true;
      } else {
        console.log('❌ API连通性异常');
        showToast('API连接异常');
        return false;
      }
    } catch (error) {
      console.error('❌ API连通性测试失败:', error);
      showToast('API连接失败');
      return false;
    }
  }
}

// 开发环境下自动暴露到全局
if (import.meta.env.DEV) {
  (window as any).ApiTestUtil = ApiTestUtil;
  console.log('🛠️ API测试工具已挂载到 window.ApiTestUtil');
  console.log('使用方法:');
  console.log('- window.ApiTestUtil.runAllTests() // 运行所有测试');
  console.log('- window.ApiTestUtil.testConnectivity() // 测试连通性');
}
